查看原文
其他

Acala和Phala联合发布首个隐私跨链用例

Phala团队 Phala可信网络 2021-02-20

为什么我们需要跨链?

在可预见的未来,平行链将颠覆所有现有的区块链技术。

平行链不仅具有 Layer1区块链和智能合约的自主性内生安全性专业性等优势,它还具备以太坊Layer2目前不具备的互操作性

什么是互操作性?Parity 核心开发者 Tomasz Drwięga 在Polkadot首届社区会Polkadot Decoded上的分享可以帮助我们更好理解:

假如你提交了一份航班延误保险的赔付申请,在正式赔付前,保险公司会从航空公司获取航班是否延误的数据,并从机场获取数据验证你是否准时去了机场。若符合以上两个条件,保险公司才会将赔付资金打入你的银行账户。该场景中,保险公司对数据的调用充分展示了互操作性的特点。

目前,平行链已自行发展出多种类别,比如:有币平行链、无币平行链、垂直于某一领域的平行链、服务于某一社区的枢纽链……

以平行链为例,使用Polkadot/Kusama的跨链技术,我们可以实现什么样的用例?

首先,我们不妨假设目前有两个最常使用的区块链协议及业务:

  • Acala Network 是一个去中心化开放式金融协议。Acala具备跨链多资产抵押的稳定币 Honzon 协议、释放 Staking 资产流动性的Homa 协议以及去中心化交易所等DeFi模块
  • Phala Network 是一个区块链隐私协议。Phala通过可信计算技术+区块链,实现了图灵完备的隐私合约,既保证智能合约可靠执行,又不必泄露敏感数据。

在此条件下,我们想:

  • 让Acala上的资产、DeFi合约使用Phala的隐私能力
  • 让Phala上的隐私资产从Acala获取

显然,在任何非Polkadot/Kusama协议下,不管是Acala还是Phala,都要耗费巨大的开发者资源和精力,但是,若我们采用Polkadot/Kusama的跨链协议,不用改动一行代码,就能实现这样的用例!

跨链用例展示

Demo Video

Github:https://github.com/Phala-Network/phala-blockchain/tree/rococo

  • Rococo中继链https://rococo-demo.phala.network/#/settings
  • Acalahttps://rococo-demo-acala.phala.network/#/explorer
  • Phalahttps://rococo-demo-phala.phala.network/legacy.html#/explorer
  • Acala钱包https://acala-dapp-4higttopf.vercel.app/#/wallet
  • Phala暗钱包https://rococo-demo-phala.phala.network


如何实现跨链交互?

跨链原理由中继链、平行链、连接链之间的协议XCMP组成。跨链交易通过基于 Merkle 树的简单排队机制来解决,以确保准确性。中继链验证人的任务是将一个平行链的输出队列上的交易移动到目标平行链的输入队列中。但是,只有关联的元数据作为哈希存储在中继链存储器中。

XCMP 队列必须首先通过打开两个平行链之间的通道来启动。通道由发送方和接收方的平行链辨识,这意味着它是一个单向通道。一对平行链之间最多可以有两个通道,一个用于向另一个链发送消息,另一个用于接收消息。

XCMP协议可以细分为:

  • VMP:平行链-中继链通信
  • HRMP:平行链-中继链-平行链中转通信
  • XCMP:平行链-平行链直接通信

目前Rococo v0上实现了VMP与HRMP,但Rococo v1还在开发中,因此我们在v0上实现了Phala-Acala之间的跨链用例。

Architecture


如上图所述,基于Polkadot XCM的Acala-Phala跨链实现由三部分组成:

  • :Rococo中继链、两个平行链:Acala、Phala
  • 跨链操作:Acala-中继链和Phala-中继链的消息传递,实现了Acala转账到暗钱包内部,以及暗钱包(Private Wallet)内部到Acala
  • 隐私黑箱:Phala上的隐私交易一切发生在TEE内运行的保密合约,所有加密数据状态对外不可见,从而实现了隐私效果

从Acala向Phala发起一笔转账

在Polkadot的世界中,除了个人控制的账号以外,还有“主权账号”的概念。例如,一个Substrate上的Pallet模块(或一个智能合约)就可以持有一定的资产。而当一个平行链接入了Polkadot之后,它也可以在其他平行链上获得自己的账号。主权账号由对应的平行链控制。每个平行链都有唯一的ID,会被映射成它对应的主权账号。

当Alice在Acala向Phala发起一笔转账交易时,例如从转出1000 ACA到Phala的Bob账户,背后发生了这些事件:

  1. 首先在Acala链上,会从Alice账户里取出(Withdraw) 1000 ACA,存入(Deposit) Phala的主权账号
  2. Acala链会发起一个XCMP转账消息,表示在Acala上已经发起了到Phala下Bob账号的跨链转账,并把消息发送给中继链,这是一个VMP UpwardMessage
  3. 中继链收到消息后,会根据平行链ID解析出消息的接收方是Phala,它就会把消息向Phala转发,这是一个VMP DownwardMessage

HRMP 是 Rococo v0 已经支持的一种简单跨链消息传递方式,它的原理是 A 链发起 UpwardMessage 给中继链,再由中继链发起 DownwardMessage,把消息中转给 B 链。因此,HRMP 是由两个 VMP 组合实现的。

Phala 暗钱包接受转账并转换为隐私币

Phala与其他链有一个很大的不同。通常一个平行链会采用波卡提供的标准实现来接受外部转账,并为用户结算。但 Phala 作为一个通用的隐私保护层,主链对应用保持中立是十分重要的,因此 Phala 主链不对跨链转账做任何处理与结算,而直接中转到保密合约之中。

在Phala端,跨链转账消息由主链接受后,直接路由至TEE中的暗钱包(Private Wallet)合约。当保密合约接收到消息后,就会为账户 Bob 增加 1000 ACA。

保密合约中的转账都是端到端加密的。虽然在外部可以看到 Bob 收到了 1000 ACA,但他可以发起隐私转账,再次转账给 Charlie,作为暗资产,Bob 所有的后续交易在链上都不可见,也无法追踪,从而保证了隐私性。

因此在Demo中,我们演示了两个暗钱包之间的隐私交易(Shielded Transction)。该隐私交易是端到端加密的,在链上只能看到密文,因此该交易的细节(如发送地址、接受地址、金额数量)在链上不可见。

从Phala向Acala发起一笔转账

最后,通过 Phala 的暗钱包可以向 Acala 发起一笔跨链转账,以实现出金。

例如,收到Bob通过隐私转账转过来的1000 ACA后,Charlie 可以在 Phala 端发起请求,向 Acala 的 Alice 账户发送 500 ACA,则背后发生了这些事情:

  1. TEE 收到转账命令,将Charlie账户中减少 500 ACA,并向Phala链上发起一笔跨链转账交易
  2. Phala 主链收到跨链转账请求后,会直接把这笔转账消息发给中继链,这是一个VMP UpwardMessage
  3. 同样,中继链会把它转发给Acala,这是一个VMP DownwardMessage
  4. Acala收到消息后,从 Phala 主权账户中取出 500 ACA 存入 Alice 的账户,这笔跨链转帐交易完成。

结语

在现有的区块链例如以太坊中,Defi和隐私Layer2的结合需要通过以太坊来互相确认,而一个Layer2协议无法与另一个Layer2协议互操作。这就导致了用户无法用Loopring协议直接调用Tonado Cash,或者用Aragon直接调用Aztec。

但是在Polkadot上,XCMP协议可以让具有强自定义能力的平行链在极少的工作量下,就能实现便捷的跨链的互操作。通过XCMP实现的可组合性,可以让开发者像搭建乐高积木一样搭建出丰富的应用案例。

在这篇文章里,我们就展示了XCMP强大的能力,我们可以直接让Acala和Phala实现互操作,通过Defi平行链和隐私平行链的组合,让DeFi得到了隐私能力。在以太坊Defi生态下,我们已经看到了可组合性的优势,因此我们相信XCMP会成为强大的Dapp Building Block,并期待在Polkadot上看到由平行链组合出的更多全新的应用。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存